1. Field of the Invention
The present invention relates to improving efficiency of a multinode system by preventing live-lock situations by reordering priority between a request and response.
2. Description of the Related Art
Typically, a multinode system grants higher priority to a response rather than a request for preventing dead-lock when a channel is shared between a request and a response. However, a live-lock situation may result if a response is always granted a higher priority than a request.
FIG. 1 illustrates a typical live-lock situation. The vertical arrows designate various nodes within a multinode system. For example, node A, C, D, and a Home node, as well as a scalability port switch (SPS).
The SPS receives a Port Read Line Data (PRLD) request that is a snoop filter miss. As a result, a Port Snoop Invalidate (PSNRI) response is returned to the request node and a Port Memory Read (PMR) is scheduled to send to the Home node for a data read. However, back pressure occurs in the PMR because it is unable to accept the request due to insufficient space to store the request for processing. Meanwhile, a Port Read Invalidate Line (PRIL) request for the same cache line requested by the PRLD arrives at the SPS from another node. Thus, the SPS retries the PRIL because it conflicts with the PRLD for the same cache line. Therefore, the response channel is selected for returning PRETRY response and the requesting node retries the PRIL request after receiving the PRETRY. Subsequently, the SPS retries the PRIL while more requests to the same cache line continue to arrive from other nodes. Thus, the Home node releases the back pressure. However, the request channel is not selected for PMR because the response channel has been selected for handling multiple PRETRY's. Therefore, the pending PRLD creates a conflict scenario, “live-lock”, and where the requests to the same cache line are continuously retried and results in new requests not being serviced and eventually leading to systems time-out